package com.demo.java.OD601_650.OD640;

import java.util.Scanner;
import java.util.*;
import java.util.stream.Collectors;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【缓存需要最少金币数 /静态扫描(A卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146972813
 */
public class OdMain {
    public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);
        int m = Integer.parseInt(in.nextLine());  // 扫描一个文件的统一费用
        List<Integer> file_ids = Arrays.stream(in.nextLine().split(" "))
                .map(Integer::parseInt)
                .collect(Collectors.toList());  // 文件标识符
        List<Integer> sizes = Arrays.stream(in.nextLine().split(" "))
                .map(Integer::parseInt)
                .collect(Collectors.toList());  // 文件大小

        // 文件标识符出现的次数
        HashMap<Integer, Integer> file_map = new HashMap<>();
        // 文件标识符对应的扫描成本
        HashMap<Integer, Integer> file_cost = new HashMap<>();

        // 遍历文件标识符，记录每个文件的出现次数和扫描成本
        for (int i = 0; i < file_ids.size(); i++) {
            file_map.put(file_ids.get(i), file_map.getOrDefault(file_ids.get(i), 0) + 1);
            file_cost.putIfAbsent(file_ids.get(i), sizes.get(i));
        }

        int result = 0;
        // 遍历每个文件标识符，计算最小扫描成本
        for (int k : file_map.keySet()) {
            result += Math.min(file_map.get(k) * file_cost.get(k), file_cost.get(k) + m);
        }

        System.out.println(result);  // 输出最终结果
    }
}